package br.com.cs.dao.jdbc;

import br.com.cs.exception.DAOException;
import br.com.cs.dao.VisitanteDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import br.com.cs.model.Visitante;


public class VisitanteJDBC extends BaseDAOJDBC implements VisitanteDAO{

            private static String SQL_INSERT_VISITANTE =
            "insert into visitante ( nome, telefone, endereco, bairro, cidade, cep, uf, ig_pertence, visita_pastoral, info_igreja, info_membro_igreja) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            
            private static String SQL_UPDATE_VISITANTE =
            "update categorias set visitante nome = ?, telefone = ? where id = ?";
           
            private static String SQL_DELETE_VISITANTE = "delete from visitante where id = ? ";
            
            private static VisitanteJDBC instance = new VisitanteJDBC();
            
            
      protected VisitanteJDBC(){
      }     
      
      public static VisitanteJDBC getInstance() {
          return instance;
      }

    @Override
    protected List getManyByCriteria(String sql) throws br.com.cs.exception.DAOException {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        List alista = new ArrayList();
        
        try {
            conn = getConnection();
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            
            while (rs.next()) {
                
                
              //  boolean ativo = rs.getInt("ativo") == 1;
                
                Visitante visitante = new Visitante();
                visitante.setId(new Integer(rs.getInt("id")));
                visitante.setNome(rs.getString("Nome"));
                visitante.setTelefone(new Integer(rs.getInt("Telefone")));
                visitante.setEndereco(rs.getString("Endereco"));
                visitante.setBairro(rs.getString("Bairro"));
                visitante.setCidade(rs.getString("Cidade"));
                visitante.setCep(rs.getString("CEP"));
                visitante.setUf(rs.getString("UF"));
                visitante.setIgreja(rs.getString("IG_PERTENCE"));
                visitante.setVisita(rs.getBoolean("VISITA_PASTORAL"));
                visitante.setInfIgreja(rs.getBoolean("INFO_IGREJA"));
                visitante.setInfMembro(rs.getBoolean("INFO_MEMBRO_IGREJA"));
                
                alista.add(visitante);
                
            }
            
            return alista;
            
        } catch (Exception e) {
            throw new DAOException("[VisitanteJDBC - getManyByCriteria] : Handled Exception  ", e);
            
        } finally {
            closeResources(conn, st, rs);
        }

    }

    @Override
    public void delete(Visitante visitante) throws br.com.cs.exception.DAOException {
        Connection conn = null;
        PreparedStatement pst = null;
        
        try {
            conn = getConnection();
            pst = conn.prepareStatement(SQL_DELETE_VISITANTE);
            
            pst.setInt(1, visitante.getId().intValue());
            
            pst.executeUpdate();
            
        } catch (Exception e) {
            throw new DAOException("[VisitanteJDBC - delete] : Handled Exception  ", e);
            
        } finally {
            closeResources(conn, pst);
        }
    }

    @Override
    public List getAll() throws br.com.cs.exception.DAOException {
        String sql = "select * from visitante ";
        return this.getManyByCriteria(sql);

    }

    @Override
    public Visitante getByPrimaryKey(Integer id) throws br.com.cs.exception.DAOException {
        String sql = "select * from visitante where id = " + id;
        List lista = this.getManyByCriteria(sql);
        if (lista != null && lista.size() > 0)
            return (Visitante) lista.get(0);
        else
            return null;
    }

    @Override
    public void save(Visitante visitante) throws br.com.cs.exception.DAOException {
       Connection conn = null;
        PreparedStatement pst = null;
        
        try {
            conn = getConnection();
            if (visitante.getId() == null) {
                System.out.println("[VisitanteJDBC] novo visitante vai ser incluida...");
                pst = conn.prepareStatement(SQL_INSERT_VISITANTE);
            } else {
                System.out.println("[VisitanteJDBC] visitnte ja existente vai ser regravada...");
                pst = conn.prepareStatement(SQL_UPDATE_VISITANTE);
                pst.setInt (12, visitante.getId().intValue());//.intValue()
            }
            
            pst.setString(1, visitante.getNome());
            pst.setInt(2, visitante.getTelefone());
            pst.setString(3, visitante.getEndereco());
            pst.setString(4, visitante.getBairro());
            pst.setString(5, visitante.getCidade());
            pst.setString(6, visitante.getCep());
            pst.setString(7, visitante.getUf());
            pst.setString(8, visitante.getIgreja());
            pst.setBoolean(9, visitante.isVisita());
            pst.setBoolean(10, visitante.isInfIgreja());
            pst.setBoolean(11, visitante.isInfMembro());
            //pst.setString(11, visitante.isInfMembro()?"S":"N");
            
            pst.execute();
            
        } catch (Exception e) {
            throw new DAOException("[VisitanteJDBC - save] : Handled Exception  ", e);
            
        } finally {
            closeResources(conn, pst);
        } 
    }

    @Override
    public List getByFilter(String filterName, String filterValue) throws br.com.cs.exception.DAOException {
        String sql = "select * from visitante where "+filterName+" = " + "'"+filterValue+"'";
        List lista = this.getManyByCriteria(sql);
        if (lista != null && lista.size() > 0)
            return lista;
        else{
            return null;
        }
    }


}